/*
 * Rotary.c
 *
 *  Created on: 2012.12.12.
 *      Author: Tibi
 */

#include "stm32f4xx.h"
#include "Rotary.h"

uint16_t speed;

void InitRotary(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9, ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);

	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_StructInit(&GPIO_InitStructure);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
	GPIO_Init(GPIOE, &GPIO_InitStructure);
	GPIO_PinAFConfig(GPIOE, GPIO_PinSource5, GPIO_AF_TIM9);

	TIM_TimeBaseInitTypeDef timbaseinit;
	TIM_TimeBaseStructInit(&timbaseinit);
	TIM_TimeBaseInit(TIM9, &timbaseinit);

	TIM_TIxExternalClockConfig(TIM9, TIM_TIxExternalCLK1Source_TI1ED, TIM_ICPolarity_Rising, 0);

	TIM_SetCounter(TIM9, 0);
	TIM_Cmd(TIM9, ENABLE);
}

uint32_t GetSpeed()
{
	uint16_t ret = TIM_GetCounter(TIM9);
	TIM_SetCounter(TIM9, 0);
	return ret;
}
